package com.suray.basic.wcs.path.core.api;

import com.suray.basic.wcs.path.core.Node;
import com.suray.basic.wcs.path.core.Route;
import com.suray.basic.wcs.path.exception.CreatePathFailedException;
import com.suray.basic.wcs.path.exception.DifFloorException;

/**
 * 路径规划接口，所有路径规划无小车动作 只是单纯路径
 *
 * @author Administrator
 */
public interface RouteFactory {

    /**
     * 传入起始位置目的位置和行驶该路径时的托盘顶升状态
     *
     * @param start        开始位置
     * @param destination  目的位置
     * @param palletStatus 穿梭车托盘状态
     * @return
     * @throws IllegalArgumentException
     * @throws IllegalStateException
     * @throws DifFloorException
     * @throws CreatePathFailedException
     */
    Route createRoute(Node start, Node destination, boolean palletStatus)
            throws IllegalArgumentException, IllegalStateException, DifFloorException, CreatePathFailedException;

    /**
     * 规划路径排除提升机节点
     * @param start
     * @param destination
     * @param palletStatus
     * @return
     * @throws IllegalArgumentException
     * @throws IllegalStateException
     * @throws DifFloorException
     * @throws CreatePathFailedException
     */
    Route createRouteNoLifterNode(Node start, Node destination, boolean palletStatus)
            throws IllegalArgumentException, IllegalStateException, DifFloorException, CreatePathFailedException;
}
